/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package nadesicoi

import javax.swing.*;
import groovy.sql.Sql

/**
 *
 * @author SYSTEM
 */
class ImportadorMicrosip {
        static def selectFile() {
            final JFileChooser fc = new JFileChooser()
            fc.showOpenDialog(null)
            fc.getSelectedFile().path

        }
	static def start() {
            def db

            try {
                println "inicia importador"
                JOptionPane.showMessageDialog(null, "Seleccione el archivo 'lista de precios' de microsip")
                def costosURL      = ImportadorMicrosip.selectFile()
                JOptionPane.showMessageDialog(null, "Seleccione el archivo (ya tratado sin títulos) 'reporte de líneas' de microsip")
                def lineasURL      = ImportadorMicrosip.selectFile()
                JOptionPane.showMessageDialog(null, "Seleccione el archivo reporte externo de microsip")
                def catCompletoURL = ImportadorMicrosip.selectFile()
                def IDAlmacen = javax.swing.JOptionPane.showInputDialog("ID Almacén?")
                if(costosURL==null||costosURL=="") { throw new Exception("Dirección de archivo de lista de precios inválida") }

                def costoData       = new File(costosURL).text
                def saltar          = 0
                def precios         = [:], precio
                def lineaData       = new File(lineasURL).text
                def catCompletoData = new File(catCompletoURL).text

                db = Sql.newInstance("jdbc:mysql://localhost/omoikane?user=root&password=", "root", "", "com.mysql.jdbc.Driver")
                db.connection.autoCommit = false

                def linea = [:]
                def relLinArt = [:]
                def IDULinea
                lineaData.eachLine {
                    linea = [codigo:it[17..19], descripcion:it[25..47]]
                    IDULinea = db.executeInsert("INSERT INTO lineas SET descripcion = ?, descuento = ?", [linea.descripcion, 0.0])
                    IDULinea = IDULinea[0][0]
                    relLinArt[linea.codigo] = IDULinea
                }
                def catCompleCache = [:], catCache = [:]
                catCompletoData.eachLine {
                    linea = [codigo: it[0..14].replace(' ', ''), codigoAlterno: it[103..115].replace(' ', ''), 
                            unidad: it[88..92].replace(' ', ''), impuesto: it[191..192].replace(' ', ''),
                            costo: it[119..129]]
                    catCache[linea.codigo] = linea
                    //println "codigo 1: ${linea.codigo.inspect()}"
                    //println "DD:${linea.inspect()}"
                }
                //println "l:${relLinArt.inspect()}"
                //println "z:${catCompletoData.dump()}"

                costoData.eachLine {
                        if(it.size() >= 3 && it[1..2] == "AC") { saltar = 8 }
                        if(it.size() >= 3 && it[1..2] == "AH") { saltar = 8 }
                        if(it.size() < 77&&saltar <= 0) { saltar = 1 }

                        if(saltar > 0) { saltar--; println it } else  {
                                try {
                                    precio = [codigo:it[0..16].replace(' ', ''),desc:it[17..54],linea:it[55..57],precio:it[77..((it.size()-1<92)?(it.size()-1):92)].replace(',','') as Double]
                                    println "codigo 2: ${precio.codigo.inspect()}"
                                    precios[precio.codigo]  = precio
                                    precio['unidad']        = catCache[precio.codigo].unidad
                                    precio['impuesto']      = catCache[precio.codigo].impuesto
                                    precio['costo']         = catCache[precio.codigo].costo
                                    precio['codigoAlterno'] = catCache[precio.codigo].codigoAlterno
                                    println "*"+precio.inspect()

                                    
                                    def IDArticulo = db.executeInsert("INSERT INTO articulos SET codigo = ?, id_linea = ?, id_grupo = ?, descripcion = ?, unidad = ? , impuestos = ?",
                                        [precio.codigo, relLinArt[precio.linea], 1, precio.desc, precio.unidad, precio.impuesto])
                                    IDArticulo = IDArticulo[0][0]
                                    db.executeInsert("INSERT INTO precios           SET id_almacen = ?, id_articulo = ?, costo = ?, descuento = ?, utilidad = ?", [IDAlmacen, IDArticulo, precio.costo, 0, 0])
                                    db.executeInsert("INSERT INTO existencias       SET id_almacen = ?, id_articulo = ?, cantidad = ?", [IDAlmacen, IDArticulo, 0])
                                    db.executeInsert("INSERT INTO codigos_articulos SET id_articulo = ?, articulo_id = ?, codigo = ?", [IDArticulo, IDArticulo, precio.codigoAlterno])
                                    
                                } catch(e) {
                                    Consola.error("[Error al insertar: ${precio.desc}]", e)
                                }
                        }
                }
                db.executeUpdate('update articulos set id_linea = 1 where id_linea is null')
                db.commit()

            } catch(e) {
                if(db!=null) { db.rollback() }
                Consola.error("Error en ImportadorMicrosip", e)
            } finally {
                if(db!=null) { db.close() }
            }


        }
}

